/** 筛选条件类型 **/
export type SelectorType =
    'dropdown'                      // 普通下拉选框
    | 'text'                        // 文本输入框
    | 'date'                        // 日期选择器
    | 'time'                        // 时间选择器
    | 'dateRange'                   // 区间日期选择器
    | 'timeRange'                   // 区间时间选择器
    | 'involvedProject'             // 特殊下拉选框，针对青海饲草项目的 "涉及项目"
    | 'cascader'                    // 级联选择器
    | 'numRange'                    // 数字区间选择器
    | 'intRange'                    // 整数区间选择器
    | 'site'                        // 市县选择器
    | 'projects'                    // 涉及项目选择器
    | 'numberRange'                 // 数字区间
    | 'customerCascader'            // 自定义级联
    | 'customerCascaderMultiple'    // 分开的自定义级联

export interface DataSource {
    label: string;
    value: any;
    children?: Array<DataSource>;
}

export interface Options {
    placeholder?: string;
    /*placeholder?: string;
    showSearch?: boolean; // 针对下拉选框是否具有输入匹配功能
    startProp?: string; // 输入框为dateRange时需要，指定查询请求中开始时间的参数名
    endProp?: string; // 输入框为dateRange时需要，指定查询请求中结束时间的参数名
    labelFrom?: string; // label对应返回数据中哪个属性，type为dropdown,且dataSource为空，即自动获取是需要
    valueFrom?: string; // value对应返回数据中哪个属性，type为dropdown,且dataSource为空，即自动获取是需要
    cascaderProps?: Array<string>; // 级联选择结果映射到返回参数中的属性所构成的数组*/
}

export interface SelectorItem {
    key: string; // 由筛选条件构成的对象中，这个条件对应的属性名
    label: string;
    type?: SelectorType;
    selectedIdx?: number; // 下拉选框的默认选中项的坐标
    dataSource?: Array<DataSource> | string; // 输入框的默认值或下拉选框的数据源
    placeholder?: string;
    showSearch?: boolean; // 针对下拉选框是否具有输入匹配功能
    startProp?: string; // 输入框为dateRange时需要，指定查询请求中开始时间的参数名
    endProp?: string; // 输入框为dateRange时需要，指定查询请求中结束时间的参数名
    labelFrom?: string; // label对应返回数据中哪个属性，type为dropdown,且dataSource为空，即自动获取是需要
    valueFrom?: string; // value对应返回数据中哪个属性，type为dropdown,且dataSource为空，即自动获取是需要
    dataSourceParams?: any;
    cascaderProps?: Array<string | { from: string, to: string }>; // 级联选择结果映射到返回参数中的属性所构成的数组
    cascaderType?: string;
    cascaderOptions?: any[];
    options?: Options;
    value?: any;
}

/** 条件筛选的生成要素 **/
export interface SelectorGen {
    selectorArr: Array<SelectorItem>;
    dataProcess?: (selectedMap: any) => any; // 需要覆盖：点击查询按钮时，对筛选条件对象封装
    isCollapse?: boolean;
    splitScale?: number;
    btnPosition?: 'topRight' | 'default';
    options?: {
        advanced?: {
            onclick: (data: any) => void
        }
    }
    classCover?: string;
}
